<?php
declare(strict_types=1);
namespace app\job;
use think\queue\Job;
use GuzzleHttp\Client;
use think\facade\Log;


class ApiTaskJob{


    public function executes(Job $job, $data){
        echo "okkkk2";
        Log::error("ApiTaskJob2");
        // 这里是处理 API 请求的具体逻辑
        try {
            $apiUrl = $data['api_url'];
            $httpMethod = $data['http_method'];
            $requestData = $data['request_data'];
            $headers = $data['headers'];

            /*// 使用 Guzzle 或其他 HTTP 客户端发送请求
            $client = new \GuzzleHttp\Client();
            $response = $client->request($httpMethod, $apiUrl, [
               'json' => $requestData,
               'headers' => $headers,
            ]);

            $result = json_decode($response->getBody(), true);
            // 对响应进行处理，例如存储结果到数据库等
            $this->handleResponse($result);*/

            // 任务执行成功，删除任务
            $job->delete();
        } catch (\Exception $e) {
            // 任务执行失败，检查重试次数，若未达到最大重试次数，释放任务以便重新执行
            if ($job->attempts() < 3) {
                $job->release(3);
            } else {
                // 达到最大重试次数，记录失败信息
                $job->failed($e);
            }
        }
    }

    /**
     * fire方法是消息队列默认调用的方法
     * @param Job            $job      当前的任务对象
     * @param array|mixed    $data     发布任务时自定义的数据
     */
    public function fire(Job $job, $data){

        echo "fire";
        // Log::error("fire11:".json_decode($data));
        Log::error("data1:");
        Log::error(json_encode($job));
        Log::error(json_encode($data));
        Log::error("data2:");
        
        // 这里是处理 API 请求的具体逻辑
        try {
            $apiUrl = $data['api_url'];
            $httpMethod = $data['http_method'];
            $requestData = $data['request_data'];
            $headers = $data['headers'];

            /*// 使用 Guzzle 或其他 HTTP 客户端发送请求
            $client = new \GuzzleHttp\Client();
            $response = $client->request($httpMethod, $apiUrl, [
               'json' => $requestData,
               'headers' => $headers,
            ]);

            $result = json_decode($response->getBody(), true);
            // 对响应进行处理，例如存储结果到数据库等
            $this->handleResponse($result);*/

            // 任务执行成功，删除任务
            $job->delete();
        } catch (\Exception $e) {
            // 任务执行失败，检查重试次数，若未达到最大重试次数，释放任务以便重新执行
            if ($job->attempts() < 3) {
                $job->release(3);
            } else {
                // 达到最大重试次数，记录失败信息
                $job->failed($e);
            }
        }

    }

    protected function handleResponse($response){
        // 这里可以对 API 响应进行处理，例如存储结果到数据库等操作
        // 示例：将结果存储到数据库
        /*$model = new \app\model\ApiResponse();
        $model->save([
           'response' => json_encode($response),
           'created_at' => date('Y-m-d H:i:s'),
        ]);*/
    }

    public function failed($e){
        // 记录任务失败信息，可以记录到日志或数据库
        Log::error('ApiTaskJob failed: '. $e->getMessage());
    }


}